<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // // 对象声明
        // var zs = {
        //     // 键值对
        //     // name: 键/属性名   'zhangsan': 值/属性值
        //     name: 'zhangsan',
        //     age: 18,
        //     weight: 200,
        // };

        // // 声明一个女朋友  身高180 体重180 年龄180
        // var gf = {
        //     name: 're8',
        //     height: 180,
        //     weight: 180,
        //     age: 180,
        // };

        // var arr = [1, 2, 3];
        // console.log(arr[2]);

        // console.log(gf['name']); // 're8'
        // console.log(gf.name); // 're8'

        // console.log(`我的女朋友叫${gf.name} 身高${gf.height} 体重${gf.weight} 年龄${gf.age}`);

        // // 很多个女朋友
        // var gfList = [
        //     {
        //         name: 're8',
        //         height: 180,
        //         weight: 180,
        //         age: 180,
        //     },
        //     {
        //         name: 'nazha',
        //         height: 180,
        //         weight: 180,
        //         age: 180,
        //     },
        //     {
        //         name: 'tongtong',
        //         height: 180,
        //         weight: 180,
        //         age: 180,
        //     },
        // ];

        // // 打印每一个女朋友的名字
        // for (var i = 0; i < gfList.length; i++) {
        //     var item = gfList[i];
        //     console.log(item.name);
        // }

        // var zs = {
        //     name: 'zhangsan',
        //     age: 88,
        //     children: [
        //         {
        //             name: 'lisi',
        //             age: 87,
        //         },
        //         {
        //             name: 'wangwu',
        //             age: 86,
        //         },
        //         {
        //             name: 'liuliu',
        //             age: 18,
        //         },
        //     ],
        // };

        // // 依次打印zhangsan孩子的名字
        // for (var i = 0; i < zs.children.length; i++) {
        //     var child = zs.children[i];
        //     console.log(child.name);
        // }


        // 1. 对象中的函数
        var zs = {
            name: 'zhangsan',
            age: 18,
            sex: '男',
            married: false,
            gf: null,
            children: [
                {
                    name: 'lisi',
                    age: 10,
                },
            ],
            // 匿名函数  es6即将优化
            sayHi: function () {
                console.log('hello');
            },
            // es6
            sayHello () {
                console.log('hello');
            },
        };

        // console.log(zs.children[0].name);
        // console.log(zs.children[1]); // undefined
        // console.log(zs.children[1].name);
        // console.log(zs.gf.name);
        // console.log(zs.married);

        zs.sayHi();

        // 依次打印对象的值
        // 'name' 'age'  'sex' 'xxx'
        // for (var key in zs) {
        //     console.log(zs[key]);
        //     // 打印以下效果
        //     // name为zhangsan
        //     // age为18
        //     // sex为男
        // }

        // 遍历对象
        for (var key in zs) {
            // console.log(object);
            console.log(`${ key }的数据类型为${ typeof zs[key] }`);
        }

        // 如何判断一个数组
        var arr = [];
        console.log(arr instanceof Array);
        console.log(Array.isArray(true));

        // 如何判断一个对象
        var obj = {};
        // typeof xxx === 'object'
        // xxx 有可能为null  也有可能为数组  也有可能为真正的对象
        console.log(typeof obj === 'object' && obj !== null && !Array.isArray(obj));

        var obj = {
            children: [1, 2, 3, 4],
            parent: {
                n1: 2,
                n2: 4,
                n3: 6,
            },
            name: 'zhangsan',
            married: false,
            gf: null,
        };

        // 求obj中所有数字的和
        // var sum = 0;
        // for (var key in obj) {
        //     var objValue = obj[key];
        //     // 数组
        //     if (Array.isArray(objValue)) {
        //         // // [1, 2, 3, 4]
        //         for (var i = 0; i < objValue.length; i++) {
        //             var arrItem = objValue[i]; // 1
        //             sum += arrItem;
        //         }
        //     }
        //     // 对象
        //     if (typeof objValue === 'object' && objValue !== null && !Array.isArray(objValue)) {
        //         // {
        //         //     n1: 2,
        //         //     n2: 4,
        //         //     n3: 6,
        //         // }
        //         for (var k in objValue) {
        //             var value = objValue[k];
        //             sum += value;
        //         }
        //     }
        // }
        // console.log(sum); // 22

        // 数组转对象


        // // 对象转数组 1
        // var obj = {
        //     name: 'zhangsan',
        //     age: 18,
        //     height: 180,
        // };
        // var expect = [
        //     ['name', 'zhangsan'],
        //     ['age', 18],
        //     ['height', 180],
        // ];

        // // var s1 = 'name';
        // // var s2 = 'zhangsan';
        // // var tmp = [s1, s2];

        // function obj2arr (obj) {
        //     var arr = [];
        //     for (var key in obj) {
        //         // key: 'name'
        //         // value: 'zhangsan'
        //         // 1.
        //         var value = obj[key];
        //         var tmp = [key, value];
        //         arr.push(tmp);
        //         // 2.
        //         // arr.push([key, obj[key]]);
        //     }
        //     return arr;
        // }

        // // 对象转数组 2
        // var obj = {
        //     name: 'zhangsan',
        //     age: 18,
        //     height: 180,
        // };
        // var expect = [
        //     {
        //         k: 'name',
        //         v: 'zhangsan',
        //     },
        //     {
        //         k: 'age',
        //         v: 18,
        //     },
        //     {
        //         k: 'height',
        //         v: 180,
        //     },
        // ];

        // function obj2arr (obj) {
        //     var arr = [];
        //     for (var key in obj) {
        //         var tmp = {
        //             k: key,
        //             v: obj[key],
        //         };
        //         arr.push(tmp);
        //     }
        //     return arr;
        // }

        // // 数组转对象 1
        // // 输入
        // var arr = [
        //     {
        //         k: 'name',
        //         v: 'zhangsan',
        //     },
        //     {
        //         k: 'age',
        //         v: 18,
        //     },
        //     {
        //         k: 'height',
        //         v: 180,
        //     },
        // ];
        // // 输出
        // var expect = {
        //     name: 'zhangsan',
        //     age: 18,
        //     height: 180,
        // };

        // // function arr2obj (arr) {
        // //     var result = {};
        // //     for (var i = 0; i < arr.length; i++) {
        // //         var key = arr[i].k;
        // //         var value = arr[i].v;
        // //         result[key] = value;
        // //     }
        // //     return result;
        // // }

        // // console.log(arr2obj(arr));

        // // 数组转对象 2
        // // 输入
        // var obj = [
        //     ['name', 'zhangsan'],
        //     ['age', 18],
        //     ['height', 180],
        // ];
        // // 输出
        // var expect = {
        //     name: 'zhangsan',
        //     age: 18,
        //     height: 180,
        // };

        // function arr2obj (arr) {
        //     var result = {};
        //     for (var i = 0; i < arr.length; i++) {
        //         // arr[i] // ['name', 'zhangsan']
        //         var key = arr[i][0];
        //         var value = arr[i][1];
        //         result[key] = value;
        //     }
        //     return result;
        // }

        var words = ['icon', 'inline', 'font', 'inline', 'navigator', 'auto', 'font', 'inline', 'block', 'count', 'transform', 'translate'];
        // 统计words数组中 重复项的个数

        // var expect = [
        //     ['icon', 1],
        //     ['inline', 3],
        //     // ...
        // ];

        var expect = {
            icon: 1,
            inline: 3,
            font: 2,
            // ...
        };

        // 统计xxx出现次数
        function getCount (words) {
            var result = {};
            for (var i = 0; i < words.length; i++) {
                var key = words[i]; // 'icon'  'inline'  'font'
                // 找到了就累加
                if (result[key] !== undefined) {
                    result[key]++;
                } else {
                    // 没找到就设置初始值
                    result[key] = 1;
                }
            }
            return result;
        }

        console.log(getCount(words));

    </script>
</body>
</html>